using System;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Common;
using DataAccess;
using Microsoft.ApplicationBlocks.Data;

namespace BusinessRules
{
    public class SigProgramaZonasGeograficas
    {

        #region Params

        private const String SPZ_ID_PARAM = "@SPZ_ID";
        private const String PRG_ID_PARAM = "@PRG_ID";
        private const String PRG_CANTIDAD_PARAM = "@PRG_CANTIDAD";
        private const String PRG_DESCRIPCION_PARAM = "@PRG_DESCRIPCION";
        private const String PRG_ANO_PARAM = "@PRG_ANO";
        private const String PRG_OBSERVACIONES_PARAM = "@PRG_OBSERVACIONES";
        private const String PRG_VALOR_EJECUCION_PARAM = "@PRG_VALOR_EJECUCION";
        private const String PRG_POBLACION_BENEFICIADA_PARAM = "@PRG_POBLACION_BENEFICIADA";
        private const String PRG_COMPONENTE_PARAM = "@PRG_COMPONENTE";
        private const String PRG_FECHA_PARAM = "@PRG_FECHA";
        private const String MET_ID_PARAM = "@MET_ID";
        private const String PRG_PORCENTAJE_AVANCE_PARAM = "@PRG_PORCENTAJE_AVANCE";
        private const String ZON_ID_PARAM = "@ZON_ID";
        private const String RES_ID_PARAM = "@RES_ID";
        private const String PRG_ESTADO_PARAM = "@PRG_ESTADO";
        

        private const String ZON_PADRE_ID_PARAM = "@ZON_PADRE_ID";
        private const String ACC_ID_PARAM = "@ACC_ID";

        private const String PER_ID_PARAM = "@PER_ID";

        #endregion

        #region Variables

        private string _CadenaConexion;

        #endregion

        #region CadenaConexion

        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }

        #endregion

        #region SigProgramaZonasGeograficas

        public SigProgramaZonasGeograficas(string strCadenaConecxion)
        {
            CadenaConexion = strCadenaConecxion;
        }

        #endregion

        private RegistroAuditoriaData registroAuditoria;
        public RegistroAuditoriaData RegistroAuditoria
        {
            get { return registroAuditoria; }
            set { registroAuditoria = value; }
        }

        protected void RegistrarAuditoria(DataTable dataTableAntes, DataTable dataTableDespues)
        {
            RegistroAuditoria registroAuditoria = new RegistroAuditoria(CadenaConexion);
            try
            {
                registroAuditoria.Adicionar(this.registroAuditoria, dataTableAntes, dataTableDespues);
            }
            catch (Exception ex)
            {
                throw new ApplicationExceptionManager(ex.Message, ex);
            }
        }

        #region ConsultarProgramaZonasGeograficasZonPadreIDRecursosIva


        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasZonPadreIDRecursosIva(string strZonPadreId, string strPerId, string strAno, string strPrgEstado, string strPrgId)
        {
            SqlParameter param1 = strZonPadreId == "0" ? new SqlParameter(ZON_PADRE_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_PADRE_ID_PARAM, strZonPadreId);
            SqlParameter param2 = new SqlParameter(PER_ID_PARAM, strPerId);
            SqlParameter param3 = strAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strAno);
            SqlParameter param4 = strPrgEstado == "" ? new SqlParameter(PRG_ESTADO_PARAM, DBNull.Value) : new SqlParameter(PRG_ESTADO_PARAM, strPrgEstado);
            SqlParameter param5 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);


            SqlParameter[] parameters = { param1, param2, param3, param4, param5 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_ZON_PADRE_ID_RECURSOS_IVA", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }


        #endregion


        #region ConsultarProgramaZonasGeograficasZonPadreID


        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasZonPadreID(string strZonPadreId, string strPerId, string strAno, string strPrgEstado, string strPrgId)
        {
            SqlParameter param1 = strZonPadreId == "0" ? new SqlParameter(ZON_PADRE_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_PADRE_ID_PARAM, strZonPadreId);
            SqlParameter param2 = new SqlParameter(PER_ID_PARAM, strPerId);
            SqlParameter param3 = strAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strAno);
            SqlParameter param4 = strPrgEstado == "" ? new SqlParameter(PRG_ESTADO_PARAM, DBNull.Value) : new SqlParameter(PRG_ESTADO_PARAM, strPrgEstado);
            SqlParameter param5 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);


            SqlParameter[] parameters = { param1, param2, param3, param4, param5 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_ZON_PADRE_ID", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }


        #endregion

        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasZonPadreIDAdministrador(string strZonPadreId, string strPerId, string strAno, string strPrgEstado, string strPrgId)
        {
            SqlParameter param1 = strZonPadreId == "0" ? new SqlParameter(ZON_PADRE_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_PADRE_ID_PARAM, strZonPadreId);
            SqlParameter param2 = new SqlParameter(PER_ID_PARAM, strPerId);
            SqlParameter param3 = strAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strAno);
            SqlParameter param4 = strPrgEstado == "" ? new SqlParameter(PRG_ESTADO_PARAM, DBNull.Value) : new SqlParameter(PRG_ESTADO_PARAM, strPrgEstado);
            SqlParameter param5 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);


            SqlParameter[] parameters = { param1, param2, param3, param4, param5 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_ZON_PADRE_ID_ADMINISTRADOR", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }


        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasMetas(string strZonPadreId, string strPerId, string strAno, string strPrgEstado, string strPrgId, string strMetId)
        {
            SqlParameter param1 = strZonPadreId == "0" ? new SqlParameter(ZON_PADRE_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_PADRE_ID_PARAM, strZonPadreId);
            SqlParameter param2 = new SqlParameter(PER_ID_PARAM, strPerId);
            SqlParameter param3 = strAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strAno);
            SqlParameter param4 = strPrgEstado == "" ? new SqlParameter(PRG_ESTADO_PARAM, DBNull.Value) : new SqlParameter(PRG_ESTADO_PARAM, strPrgEstado);
            SqlParameter param5 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);
            SqlParameter param6 = strMetId == "" ? new SqlParameter(MET_ID_PARAM, DBNull.Value) : new SqlParameter(MET_ID_PARAM, strMetId);


            SqlParameter[] parameters = { param1, param2, param3, param4, param5, param6 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_METAS", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }        


        

        public SigProgramaZonasGeograficasData BuscarProgramaZonasGeograficasIndicadores(String strZonId, String strPrgId, String strPrgAno, String strPerId)
        {
            SqlParameter param1 = strZonId == "0" ? new SqlParameter(ZON_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_ID_PARAM, strZonId);
            SqlParameter param2 = strPrgAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strPrgAno);
            SqlParameter param3 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);
            SqlParameter param4 = strPerId == "" ? new SqlParameter(PER_ID_PARAM, DBNull.Value) : new SqlParameter(PER_ID_PARAM, strPerId);



            SqlParameter[] parameters = { param1, param2, param3, param4 };

            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTA_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS_INDICADOR_DEPARTAMENTOS", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }

        
        public SigProgramaZonasGeograficasData BuscarProgramaZonasGeograficasIndicadoresMunicipios(String strZonId, String strPrgId, String strPrgAno, String strPerId)
        {
            SqlParameter param1 = strZonId == "0" ? new SqlParameter(ZON_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_ID_PARAM, strZonId);
            SqlParameter param2 = strPrgAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strPrgAno);
            SqlParameter param3 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);
            SqlParameter param4 = strPerId == "" ? new SqlParameter(PER_ID_PARAM, DBNull.Value) : new SqlParameter(PER_ID_PARAM, strPerId);



            SqlParameter[] parameters = { param1, param2, param3, param4 };

            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTA_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS_INDICADOR_MUNICIPIOS", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }
        

        #region BuscarProgramaZonasGeograficasTodos

        public SigProgramaZonasGeograficasData BuscarProgramaZonasGeograficasTodos()
        {
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_SIG_PLAN_PROGRAMA", objSigProgramaZonasGeograficasData);
            return objSigProgramaZonasGeograficasData;
        }

        #endregion


        #region ConsultarProgramaZonasGeograficasZonIDRecursosIva

        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasZonIDRecursosIva(String strZonPadreId, String strZonId, String strPerId, String strAno, String strPrgEstado, String strPrgId)
        {
            SqlParameter param1 = new SqlParameter(ZON_PADRE_ID_PARAM, strZonPadreId);
            SqlParameter param2 = strZonId == "0" ? new SqlParameter(ZON_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_ID_PARAM, strZonId);
            SqlParameter param3 = new SqlParameter(PER_ID_PARAM, strPerId);
            SqlParameter param4 = strAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strAno);
            SqlParameter param5 = new SqlParameter(PRG_ESTADO_PARAM, strPrgEstado);
            SqlParameter param6 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);

            SqlParameter[] parameters = { param1, param2, param3, param4, param5, param6 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_ZON_ID_RECURSOS_IVA", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }

        #endregion


        #region ConsultarProgramaZonasGeograficasZonID

        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasZonID(String strZonPadreId, String strZonId, String strPerId, String strAno, String strPrgEstado, String strPrgId)
        {
            SqlParameter param1 = new SqlParameter(ZON_PADRE_ID_PARAM, strZonPadreId);
            SqlParameter param2 = strZonId == "0" ? new SqlParameter(ZON_ID_PARAM, DBNull.Value) : new SqlParameter(ZON_ID_PARAM, strZonId);
            SqlParameter param3 = new SqlParameter(PER_ID_PARAM, strPerId);
            SqlParameter param4 = strAno == "0" ? new SqlParameter(PRG_ANO_PARAM, DBNull.Value) : new SqlParameter(PRG_ANO_PARAM, strAno);
            SqlParameter param5 = new SqlParameter(PRG_ESTADO_PARAM, strPrgEstado);
            SqlParameter param6 = strPrgId == "" ? new SqlParameter(PRG_ID_PARAM, DBNull.Value) : new SqlParameter(PRG_ID_PARAM, strPrgId);

            SqlParameter[] parameters = { param1, param2, param3, param4, param5, param6 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_ZON_ID", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }

        #endregion

        

        #region ConsultarProgramaZonasGeograficasSpzId

        public SigProgramaZonasGeograficasData ConsultarProgramaZonasGeograficasSpzId(String strSpzID)
        {
            SqlParameter param1 = new SqlParameter(SPZ_ID_PARAM, strSpzID);
            SqlParameter[] parameters = { param1 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_SPZ_ID", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }

        #endregion

        #region ConsultarProgramaZonasGeograficasOtros

        public DataTable ConsultarProgramaZonasGeograficasOtros(String strZonId, String strMetId)
        {
            SqlParameter param1 = new SqlParameter(MET_ID_PARAM, strMetId);
            SqlParameter param2 = new SqlParameter(ZON_ID_PARAM, strZonId);
            SqlParameter[] parameters = { param1, param2 };
            DataTable objSigProgramaZonasGeograficasData = new DataTable();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PRG_ACCION_ZONAGEOGRAFICA_ZONAS_PROGRAMADAS_OTROS", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }

        #endregion


        #region ConsultarHomologacionPlanProgramaSigAccion

        public SigProgramaZonasGeograficasData ConsultarHomologacionPlanProgramaSigAccion(String strMetID)
        {
            SqlParameter param1 = new SqlParameter(MET_ID_PARAM, strMetID);
            SqlParameter[] parameters = { param1 };
            SigProgramaZonasGeograficasData objSigProgramaZonasGeograficasData = new SigProgramaZonasGeograficasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_SIG_PLAN_PROGRAMA_PLAN_ACCION_MET_ID", objSigProgramaZonasGeograficasData, parameters);
            return objSigProgramaZonasGeograficasData;
        }

        #endregion

        public decimal AdicionarPlanesProgramasConTransacciones(SigProgramaZonasGeograficasData datosSigProgramaZonasGeograficas, SigEntidadesProgramasData objSigEntidadesProgramasData)
		{
			decimal decIdentificador = 0;
			SqlConnection objConexion = new SqlConnection(this.CadenaConexion);
			objConexion.Open();
			SqlTransaction objTransaccion = objConexion.BeginTransaction();

			try
			{
                //Adicionar SigProgramasZonasGeograficas
                decIdentificador = AdicionarProgramaZonasGeograficas(datosSigProgramaZonasGeograficas, objTransaccion);


                //Eliminar Entidades Relacionadas
                SigEntidadesProgramas objSigEntidadesProgramas = new SigEntidadesProgramas(this.CadenaConexion);
                objSigEntidadesProgramas.ElimianarSigEntidadesProgramasSPZ(decIdentificador.ToString(), objTransaccion);
                
                //Adicionar Entidades Relacionadas
                foreach (DataRow obj in objSigEntidadesProgramasData.Rows)
                {
                    obj[SigEntidadesProgramasData.SPZ_ID_FIELD] = decIdentificador;
                }
			    
			    objSigEntidadesProgramas.AdicionarSigEntidadesProgramas(objSigEntidadesProgramasData, objTransaccion);

                


                objTransaccion.Commit();

            }
            catch (Exception ex)
            {
                decIdentificador = 0;
                objTransaccion.Rollback();
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }
            finally
            {
                if (objConexion != null)
                {
                    objConexion.Close();
                }

                if (objTransaccion != null)
                {
                    objTransaccion.Dispose();
                }
                if (objConexion != null)
                {
                    objConexion.Dispose();
                }
            }
            return decIdentificador;
        }


        #region AdicionarProgramaZonasGeograficas

        public decimal AdicionarProgramaZonasGeograficas(SigProgramaZonasGeograficasData datos, params SqlTransaction[] objTransaction)
        {
            decimal decIdentificador = 0;
            try
            {
                foreach (DataRow row in datos.Rows)
                {
                    SqlParameter param1 = new SqlParameter(SPZ_ID_PARAM, SqlDbType.Decimal);
                    param1.Direction = ParameterDirection.Output;
                    SqlParameter param2 = new SqlParameter(PRG_ID_PARAM, row[SigProgramaZonasGeograficasData.PRG_ID_FIELD]);
                    SqlParameter param3 = new SqlParameter(PRG_CANTIDAD_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_CANTIDAD_FIELD]);
                    SqlParameter param4 = new SqlParameter(PRG_DESCRIPCION_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_DESCRIPCION_FIELD]);
                    SqlParameter param5 = new SqlParameter(PRG_ANO_PARAM, row[SigProgramaZonasGeograficasData.PRG_ANO_FIELD]);
                    SqlParameter param6 = new SqlParameter(PRG_OBSERVACIONES_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_OBSERVACIONES_FIELD]);

                    SqlParameter param7;
                    if (row[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD] == null || row[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD].ToString() == "")
                        param7 = new SqlParameter(PRG_VALOR_EJECUCION_PARAM, DBNull.Value);
                    else
                        param7 = new SqlParameter(PRG_VALOR_EJECUCION_PARAM, row[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD]);

                    SqlParameter param8 = new SqlParameter(PRG_POBLACION_BENEFICIADA_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_POBLACION_BENEFICIADA_FIELD]);
                    SqlParameter param9;
                    if (row[SigProgramaZonasGeograficasData.ZON_ID_FIELD] == null || row[SigProgramaZonasGeograficasData.ZON_ID_FIELD].ToString() == "")
                        param9 = new SqlParameter(ZON_ID_PARAM, DBNull.Value);
                    else
                        param9 = new SqlParameter(ZON_ID_PARAM, row[SigProgramaZonasGeograficasData.ZON_ID_FIELD]);

                    SqlParameter param10;
                    if (row[SigProgramaZonasGeograficasData.RES_ID_FIELD] == null || row[SigProgramaZonasGeograficasData.RES_ID_FIELD].ToString() == "")
                        param10 = new SqlParameter(RES_ID_PARAM, DBNull.Value);
                    else
                        param10 = new SqlParameter(RES_ID_PARAM, row[SigProgramaZonasGeograficasData.RES_ID_FIELD]);

                    SqlParameter param11 = new SqlParameter(PRG_ESTADO_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_ESTADO_FIELD]);

                    SqlParameter param12;
                    if (row[SigProgramaZonasGeograficasData.MET_ID_FIELD] == null || row[SigProgramaZonasGeograficasData.MET_ID_FIELD].ToString() == "")
                        param12 = new SqlParameter(MET_ID_PARAM, DBNull.Value);
                    else
                        param12 = new SqlParameter(MET_ID_PARAM, row[SigProgramaZonasGeograficasData.MET_ID_FIELD]);

                    SqlParameter param13 = new SqlParameter(PRG_FECHA_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_FECHA_FIELD]);

                    SqlParameter param14;
                    if (row[SigProgramaZonasGeograficasData.PRG_PORCENTAJE_AVANCE_FIELD] == null || row[SigProgramaZonasGeograficasData.PRG_PORCENTAJE_AVANCE_FIELD].ToString() == "")
                        param14 = new SqlParameter(PRG_PORCENTAJE_AVANCE_PARAM, DBNull.Value);
                    else
                        param14 = new SqlParameter(PRG_PORCENTAJE_AVANCE_PARAM, row[SigProgramaZonasGeograficasData.PRG_PORCENTAJE_AVANCE_FIELD]);

                    SqlParameter[] parameters = {
                                                    param1, param2, param3, param4, param5, param6, param7, param8, param9,
                                                    param10,param11, param12,param13, param14
                                                };

                    if (objTransaction.Length == 0)
                    {
                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                  "PAS_ADICIONAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS", parameters);
                    }
                    else
                    {
                        SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                  "PAS_ADICIONAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS", parameters);
                    }

                    decIdentificador = decimal.Parse(param1.Value.ToString());
                }
                return (decIdentificador);

            }
            catch (SqlException sqlEx)
            {
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS"), sqlEx);
            }
            catch (Exception ex)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }

        }

        #endregion


        public decimal ActualizarPlanesProgramasConTransacciones(SigProgramaZonasGeograficasData datosSigProgramaZonasGeograficas, SigEntidadesProgramasData objSigEntidadesProgramasData)
        {
            decimal decIdentificador = 0;
            SqlConnection objConexion = new SqlConnection(this.CadenaConexion);
            objConexion.Open();
            SqlTransaction objTransaccion = objConexion.BeginTransaction();

            try
            {
                //Adicionar SigProgramasZonasGeograficas
                decIdentificador = actualizarProgramaZonasGeograficas(datosSigProgramaZonasGeograficas, objTransaccion);


                //Eliminar Entidades Relacionadas
                SigEntidadesProgramas objSigEntidadesProgramas = new SigEntidadesProgramas(this.CadenaConexion);
                objSigEntidadesProgramas.ElimianarSigEntidadesProgramasSPZ(decIdentificador.ToString(), objTransaccion);

                //Adicionar Entidades Relacionadas
                foreach (DataRow obj in objSigEntidadesProgramasData.Rows)
                {
                    obj[SigEntidadesProgramasData.SPZ_ID_FIELD] = decIdentificador;
                }

                objSigEntidadesProgramas.AdicionarSigEntidadesProgramas(objSigEntidadesProgramasData, objTransaccion);
                objTransaccion.Commit();

            }
            catch (Exception ex)
            {
                decIdentificador = 0;
                objTransaccion.Rollback();
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }
            finally
            {
                if (objConexion != null)
                {
                    objConexion.Close();
                }

                if (objTransaccion != null)
                {
                    objTransaccion.Dispose();
                }
                if (objConexion != null)
                {
                    objConexion.Dispose();
                }
            }
            return decIdentificador;
        }

        public void EliminarPlanesProgramasConTransacciones(string parSPZ_ID)
        {
           
            SqlConnection objConexion = new SqlConnection(CadenaConexion);
            objConexion.Open();
            SqlTransaction objTransaccion = objConexion.BeginTransaction();

            try
            {
                //ELIMINAR COFINANCIACION
                CofinanciacionProgramas objCofinanciacionProgramas = new CofinanciacionProgramas(CadenaConexion);
                objCofinanciacionProgramas.EliminarCofinanciacionProgramasSPZ(parSPZ_ID, objTransaccion);

                //Eliminar Entidades Relacionadas
                SigEntidadesProgramas objSigEntidadesProgramas = new SigEntidadesProgramas(CadenaConexion);
                objSigEntidadesProgramas.ElimianarSigEntidadesProgramasSPZ(parSPZ_ID, objTransaccion);


                //ELIMINAR EJECUCION
                SigProgramaZonasGeograficasEjecucion objSigProgramaZonasGeograficasEjecucion  = new SigProgramaZonasGeograficasEjecucion(CadenaConexion);
                objSigProgramaZonasGeograficasEjecucion.EliminarProgramasZonasGeograficasEjecucionSPZ(parSPZ_ID, objTransaccion);

                //ELIMINAR IMAGENES
                SigImagenesPrograma objSigImagenesPrograma = new SigImagenesPrograma(CadenaConexion);
                objSigImagenesPrograma.EliminarSigImagenes(parSPZ_ID, objTransaccion);

                //ELIMINAR PROGRAMAS ZONAS GEOGRAFICAS
                EliminarProgramasZonasGeograficas(parSPZ_ID, objTransaccion);

                
                objTransaccion.Commit();

            }
            catch (Exception ex)
            {

                objTransaccion.Rollback();
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }
            finally
            {
                if (objConexion != null)
                {
                    objConexion.Close();
                }

                if (objTransaccion != null)
                {
                    objTransaccion.Dispose();
                }
                if (objConexion != null)
                {
                    objConexion.Dispose();
                }
            }
            
        }

        #region actualizarProgramaZonasGeograficas

        public decimal actualizarProgramaZonasGeograficas(SigProgramaZonasGeograficasData datos, params SqlTransaction[] objTransaction)
        {
            decimal decIdentificador = 0;
            try
            {
                SigProgramaZonasGeograficasData datosAntes = new SigProgramaZonasGeograficasData();
                foreach (DataRow row in datos.Rows)
                {
                    datosAntes  = ConsultarProgramaZonasGeograficasSpzId(row[SigProgramaZonasGeograficasData.SPZ_ID_FIELD].ToString());
                    SqlParameter param1 = new SqlParameter(SPZ_ID_PARAM, row[SigProgramaZonasGeograficasData.SPZ_ID_FIELD]);
                    SqlParameter param2 = new SqlParameter(PRG_ID_PARAM, row[SigProgramaZonasGeograficasData.PRG_ID_FIELD]);
                    SqlParameter param3 = new SqlParameter(PRG_CANTIDAD_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_CANTIDAD_FIELD]);
                    SqlParameter param4 = new SqlParameter(PRG_DESCRIPCION_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_DESCRIPCION_FIELD]);
                    SqlParameter param5 = new SqlParameter(PRG_ANO_PARAM, row[SigProgramaZonasGeograficasData.PRG_ANO_FIELD]);
                    SqlParameter param6 = new SqlParameter(PRG_OBSERVACIONES_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_OBSERVACIONES_FIELD]);
                    SqlParameter param7;
                    if (row[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD] == null || row[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD].ToString() == "")
                        param7 = new SqlParameter(PRG_VALOR_EJECUCION_PARAM, DBNull.Value);
                    else
                        param7 = new SqlParameter(PRG_VALOR_EJECUCION_PARAM, row[SigProgramaZonasGeograficasData.PRG_VALOR_EJECUCION_FIELD]);

                    SqlParameter param8 = new SqlParameter(PRG_POBLACION_BENEFICIADA_PARAM,
                                                           row[SigProgramaZonasGeograficasData.PRG_POBLACION_BENEFICIADA_FIELD]);
                    SqlParameter param9;
                    if (row[SigProgramaZonasGeograficasData.ZON_ID_FIELD] == null || row[SigProgramaZonasGeograficasData.ZON_ID_FIELD].ToString() == "")
                        param9 = new SqlParameter(ZON_ID_PARAM, DBNull.Value);
                    else
                        param9 = new SqlParameter(ZON_ID_PARAM, row[SigProgramaZonasGeograficasData.ZON_ID_FIELD]);

                    SqlParameter param10;
                    if (row[SigProgramaZonasGeograficasData.RES_ID_FIELD] == null || row[SigProgramaZonasGeograficasData.RES_ID_FIELD].ToString() == "")
                        param10 = new SqlParameter(RES_ID_PARAM, DBNull.Value);
                    else
                        param10 = new SqlParameter(RES_ID_PARAM, row[SigProgramaZonasGeograficasData.RES_ID_FIELD]);

                    SqlParameter param11 = new SqlParameter(PRG_ESTADO_PARAM, row[SigProgramaZonasGeograficasData.PRG_ESTADO_FIELD]);

                    SqlParameter param12 = new SqlParameter(PRG_FECHA_PARAM, row[SigProgramaZonasGeograficasData.PRG_FECHA_FIELD]);

                    SqlParameter param13;
                    if (row[SigProgramaZonasGeograficasData.PRG_PORCENTAJE_AVANCE_FIELD] == null || row[SigProgramaZonasGeograficasData.PRG_PORCENTAJE_AVANCE_FIELD].ToString() == "")
                        param13 = new SqlParameter(PRG_PORCENTAJE_AVANCE_PARAM, DBNull.Value);
                    else
                        param13 = new SqlParameter(PRG_PORCENTAJE_AVANCE_PARAM, row[SigProgramaZonasGeograficasData.PRG_PORCENTAJE_AVANCE_FIELD]);



                    SqlParameter[] parameters = {
                                                    param1, param2, param3, param4, param5, param6, param7, param8, param9,
                                                    param10,param11,param12,param13
                                                };

                    if (objTransaction.Length == 0)
                    {
                        SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure,
                                                  "PAS_ACTUIALIZAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS", parameters);
                    }
                    else
                    {
                        SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure,
                                                  "PAS_ACTUIALIZAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS", parameters);
                    }

                    decIdentificador = decimal.Parse(param1.Value.ToString());

                    #region 2. Registro de Auditoria
                    if (RegistroAuditoria != null)
                    {
                        RegistrarAuditoria(datosAntes, datos);
                    }
                    #endregion
                }
                return (decIdentificador);

            }
            catch (SqlException sqlEx)
            {
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUIALIZAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS"), sqlEx);
            }
            catch (Exception ex)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }

        }

        #endregion

        #region EliminarProgramasZonasGeograficas

        public void EliminarProgramasZonasGeograficas(string parSPZ_ID, params SqlTransaction[] objTransaction)
        {
            try
            {

                SqlParameter param1 = new SqlParameter(SPZ_ID_PARAM, parSPZ_ID);
                SqlParameter[] parameters = { param1 };
                if (objTransaction.Length == 0)
                {
                    SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS", parameters);
                }
                else
                {
                    SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure, "PAS_ELIMINAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS", parameters);
                }

            }
            catch (SqlException sqlEx)
            {
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS"), sqlEx);
            }
            catch (Exception ex)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }
        }

        #endregion

        #region ActualizarProgramasZonasGeograficasEstado

        public void ActualizarProgramasZonasGeograficasEstado(string parSPZ_ID, string srtPRG_ESTADO, params SqlTransaction[] objTransaction)
        {
            try
            {

                SqlParameter param1 = new SqlParameter(SPZ_ID_PARAM, parSPZ_ID);
                SqlParameter param2 = new SqlParameter(PRG_ESTADO_PARAM, srtPRG_ESTADO);
                SqlParameter[] parameters = { param1, param2 };
                if (objTransaction.Length == 0)
                {
                    SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ACTUIALIZAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS_ESTADO", parameters);
                }
                else
                {
                    SqlHelper.ExecuteNonQuery(objTransaction[0], CommandType.StoredProcedure, "PAS_ACTUIALIZAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS_ESTADO", parameters);
                }

            }
            catch (SqlException sqlEx)
            {
                throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUIALIZAR_SIG_PROGRAMAS_BAS_ZONAS_GEOGRAFICAS_ESTADO"), sqlEx);
            }
            catch (Exception ex)
            {
                throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
            }
        }

        #endregion

    }
}
